iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
Mobile Development

[Android Studio & Spring boot 30天挑戰]系列 第 18

[Android Studio & Spring boot 30天挑戰] Day18- QRCode

  • 分享至 

  • xImage
  •  

今天,要介紹的是介紹QR碼(Quick Response Code)在Android Studio中的應用。QR碼是一種二維條碼,它可以存儲大量數據,並且能夠在快速掃描的情況下迅速讀取。在這篇文章中,我們將探討如何使用Android Studio來生成和讀取QR碼,並討論一些實際應用。

首先一樣的要加入我們的依賴。

dependencies {
    implementation 'com.journeyapps:zxing-android-embedded:4.3.0'
}

再來介紹 APP 畫面,第一顆按鈕式掃描 QRCode 並顯示到下面的 TextView,第二顆則是將 EditText 的文字生成,成QRCode。

https://ithelp.ithome.com.tw/upload/images/20230828/20150369tbH8i1U2ZA.png

首先介紹生成 QRCode 這個方法的主要功能是使用MultiFormatWriter將文本轉換為QR碼的位矩陣,然後使用BarcodeEncoder將該位矩陣轉換為QR碼的Bitmap圖像。最後,它將生成的QR碼設置為ImageView的圖像。

public void writerQRCode(View v) {
    // 創建一個QR碼生成器
    MultiFormatWriter writer = new MultiFormatWriter();
    try {
        // 使用生成器將文本轉換為QR碼的位矩陣(BitMatrix)
        // e.getText().toString().trim() 從EditText中獲取輸入的文本,然後去除首尾的空格和換行符
        BitMatrix matrix = writer.encode(e.getText().toString().trim(), BarcodeFormat.QR_CODE, 500, 500);

        // 創建一個QR碼編碼器
        BarcodeEncoder encoder = new BarcodeEncoder();

        // 使用編碼器創建一個QR碼的Bitmap圖像
        Bitmap bitmap = encoder.createBitmap(matrix);

        // 將生成的QR碼設置為ImageView的圖像
        imageView.setImageBitmap(bitmap);

    } catch (WriterException ex) {
        ex.printStackTrace();
    }
}

最後介紹使用相機掃描 QRCOde前,要先給相機的權限。

private final String[] permission = new String[]{
        Manifest.permission.CAMERA
};

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    requestPermissions(permission, PERMISSION_REQUEST_CODE);
}

這個方法使用了IntentIntegrator類,該類來自Zxing庫,用於啟動QR碼掃描器。它設置了掃描的類型(這裡是QR_CODE)、掃描時的提示信息、使用的相機(前相機或後相機)、是否播放逼聲以及是否鎖定方向。最後,它通過initiateScan方法啟動了掃描過程。

public void openCamera(View v) {
    IntentIntegrator integrator = new IntentIntegrator(this);
    // 選擇掃描類型
    integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE);
    integrator.setPrompt("開始掃描");
    // 1為前相機,0為後相機
    integrator.setCameraId(0);
    // 逼聲
    integrator.setBeepEnabled(true);
    // 鎖定方向
    integrator.setOrientationLocked(false);
    integrator.initiateScan();
}

最後就是當QR碼掃描完成後,onActivityResult方法會被調用。它通過IntentIntegrator.parseActivityResult方法解析掃描結果,並檢查是否成功獲取到掃描內容。如果成功,它將內容設置為TextView的文本並啟用自動連結和文本滾動。如果未成功獲取到內容,它會在TextView中顯示"失敗!!!"。

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // 解析QR碼掃描結果
    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if (scanResult != null) {
        if (scanResult.getContents() != null) {
            // 獲取掃描到的內容
            String scannedContent = scanResult.getContents();
            if (!scannedContent.equals("")) {
                // 如果內容不為空,將其設置為TextView的文本
                t.setText(scannedContent);
                // 啟用自動連結,例如URL和電子郵件地址
                t.setAutoLinkMask(Linkify.ALL);
                // 設置文本滾動
                t.setMovementMethod(LinkMovementMethod.getInstance());
            }
        } else {
            // 如果無法獲取內容,顯示"失敗!!!"文本
            t.setText("失敗!!!");
        }
    }
}

上一篇
[Android Studio & Spring boot 30天挑戰] D17 - 讀取照片
下一篇
[Android Studio & Spring boot 30天挑戰] Day19- 生物辨識
系列文
[Android Studio & Spring boot 30天挑戰]30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言